使用nginx 做代理
使用 无法备案的域名
其实很简单.
一个例子, 我们的一个新款域名, 无法备案, 无法在国内的主机供应商上使用.
所以一种解决方案,是在香港上个主机, 然后把 special.domain 的A 记录指上去.
然后在 香港主机上, 弄个nginx,配置代理,把所有的request 都打到国内的服务器上去.
也就是: 用户 -> special.domain -> 香港服务器 -> 大陆服务器(接收到了request, 返回response ) -> 香港服务器 -> 用户
那么, 香港的nginx配置如下:
server {
listen 80;
server_name special.domain;
charset utf-8;
location / {
expires 30m;
access_log on;
add_header Cache-Control "public";
proxy_pass http://normal.domain.com ; # 这里就是 http://<国内服务器ip>;
proxy_redirect default;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_next_upstream http_502 http_504 error timeout invalid_header;
}
}
在nginx转发时保留原始域名( keep the Host header via nginx proxy_pass )
最近的子项目越来越多,但是只有一个域名, 在做了nginx的跳转之后, 发现原来的域名会丢失,取代出现的是IP。
(with the growth of the sub-systems of my current project, there is a problem occurred: the origin domain name disappeared and it is replaced by the ip addresses , which is not liked by my workmates. )
所以我们要保留原始域名,这货也叫 Host header. (so the solution is to keep the origin domain name . aka host Header. )
solution is : proxy_set_header Host $http_host;
server {
listen 80;
# this is the key !!!!!
proxy_set_header Host $host;
location /client/pids {
proxy_pass http://10.103.13.103:3200/client/pids;
}
location /interface/client/pids {
proxy_pass http://10.103.13.103:3200/interface/client/pids;
}
......
```bash
## nginx sub uri 转发
nginx的转发非常重要,它可以让我们实现复杂的 集群。
下面是个例子:
server { listen 5000; location /client { proxy_pass http://10.103.13.103:5100/client; } location /interface/client { proxy_pass http://10.103.13.103:5100/interface/client; } location / { proxy_pass http://10.103.13.103:5118; } } ```
5100, 5118分别是两个端口,跑着CLIENT 和主CMS。
(注:后来我们就把这两个app放在了不同的服务器上,大大降低了系统负载,提高了app的稳定性)